package com.example.number01;

import java.util.ArrayList;
import java.util.Collections;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AbsoluteLayout;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Gogamenumber extends Activity {
	private TextView moves;
	private Button[] buttons;
	private boolean bad_moves = false;
	private static final Integer[] goar = new Integer[] { 1, 2, 3, 4, 5, 6, 7,
			8, 0 };
	private ArrayList<Integer> cell = new ArrayList<Integer>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.gogame);
		buttons = findbutton();
		for (int i = 0; i < 9; i++) {
			cell.add(i);// arraylist có 9 thành phần
		}
		Collections.shuffle(cell);// set  arraylist  random
		fill_grid();
		moves = (TextView) findViewById(R.id.tvnumber);

		for (int i = 0; i < 9; i++) {
			buttons[i].setOnClickListener(new View.OnClickListener() {
						@Override
						public void onClick(View arg0) {
							makemoves((Button) arg0);// gọi hàm makemove tham số
														// truyền vào button
						}
					});
		}
		moves.setText("0");
	}

	
	public Button[] findbutton() {
		Button[] b = new Button[9];
		b[0] = (Button) findViewById(R.id.button00);
		b[1] = (Button) findViewById(R.id.Button01);
		b[2] = (Button) findViewById(R.id.button02);
		b[3] = (Button) findViewById(R.id.button03);
		b[4] = (Button) findViewById(R.id.Button04);
		b[5] = (Button) findViewById(R.id.Button05);
		b[6] = (Button) findViewById(R.id.Button06);
		b[7] = (Button) findViewById(R.id.Button07);
		b[8] = (Button) findViewById(R.id.Button08);
		return b;
	}

	
	public void makemoves(Button b) {
		bad_moves = true;
		int b_text, b_pos, zus_pos;
		b_text = Integer.parseInt((String) b.getText());// biến này truy xuất
														// các chuỗi trong
														// button nói đúng hơn
														// là xuất hết button ra
		b_pos = findpos(b_text);// biến gọi hàm findpos truyền vào biến xuất
								// button
		zus_pos = findpos(0);// biến gọi hàm findpos truyền vào 0
		switch (zus_pos) {
		case (0):
			if (b_pos == 1 || b_pos == 3)
				bad_moves = false;
			break;
		case (1):
			if (b_pos == 0 || b_pos == 2 || b_pos == 4)
				bad_moves = false;
			break;
		case (2):
			if (b_pos == 1 || b_pos == 5)
				bad_moves = false;
			break;
		case (3):
			if (b_pos == 0 || b_pos == 4 || b_pos == 6)
				bad_moves = false;
			break;
		case (4):
			if (b_pos == 1 || b_pos == 3 || b_pos == 5 || b_pos == 7)
				bad_moves = false;
			break;
		case (5):
			if (b_pos == 2 || b_pos == 4 || b_pos == 8)
				bad_moves = false;
			break;
		case (6):
			if (b_pos == 3 || b_pos == 7)
				bad_moves = false;
			break;
		case (7):
			if (b_pos == 4 || b_pos == 6 || b_pos == 8)
				bad_moves = false;
			break;
		case (8):
			if (b_pos == 5 || b_pos == 7)
				bad_moves = false;
			break;
		}
		if (bad_moves == true) {
			return;
		}
		
		cell.remove(b_pos);// di chuyển xog cần bỏ b_pos cũ
		cell.add(b_pos, 0);// và thêm cái mới
		cell.remove(zus_pos);// bỏ zus_pos cũ
		cell.add(zus_pos, b_text);// và thêm cái mới
		fill_grid();
		moves.setText(Integer.toString(Integer.parseInt((String) moves
				.getText()) + 1));
		for (int i = 0; i < 9; i++) {
			if (cell.get(i) != goar[i]) {
				return;
			}
		}
		display("Bạn đã chiến thắng");
	}

	
	public int findpos(int value) {
		int i = 0;
		for (i = 0; i < 9; i++) {
			if (cell.get(i) == value) {
				break;
			}
		}
		return i;
	}

	
	public void fill_grid() {
		for (int i = 0; i < 9; i++) {
			int text = cell.get(i);
			AbsoluteLayout.LayoutParams abso = (AbsoluteLayout.LayoutParams) buttons[text]
					.getLayoutParams();
			switch (i) {
			case (0):
				abso.x = 5;
				abso.y = 5;
				buttons[text].setLayoutParams(abso);
				break;
			case (1):
				abso.x = 110;
				abso.y = 5;
				buttons[text].setLayoutParams(abso);
				break;
			case (2):
				abso.x = 215;
				abso.y = 5;
				buttons[text].setLayoutParams(abso);
				break;
			case (3):
				abso.x = 5;
				abso.y = 110;
				buttons[text].setLayoutParams(abso);
				break;
			case (4):
				abso.x = 110;
				abso.y = 110;
				buttons[text].setLayoutParams(abso);
				break;
			case (5):
				abso.x = 215;
				abso.y = 110;
				buttons[text].setLayoutParams(abso);
				break;
			case (6):
				abso.x = 5;
				abso.y = 215;
				buttons[text].setLayoutParams(abso);
				break;
			case (7):
				abso.x = 110;
				abso.y = 215;
				buttons[text].setLayoutParams(abso);
				break;
			case (8):
				abso.x = 215;
				abso.y = 215;
				buttons[text].setLayoutParams(abso);
				break;
			}
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	private void display(String string) {
		// TODO Auto-generated method stub
		Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
	}

}
